# 使用manager管理app,可以使用终端启动
# 功能，启动项目，项目入口，还需要完成数据库迁移的功能，需要db,

"""
因为入口函数使用manager管理app,而数据库迁移需要用到manager添加命令
所以迁移操作写在入口函数中
"""""
import datetime
import random

from flask import current_app

from info import create_app,db,models
from flask_script import Manager
from flask_migrate import Migrate,MigrateCommand

#调用工厂方法
from info.models import User

app = create_app("develop")

manager =Manager(app)
# 数据库迁移
Migrate(app,db)
manager.add_command('db',MigrateCommand)



# 创建管理员对象
@manager.option('-u','--username',dest='username')
@manager.option('-p','--password',dest='password')
def create_super_user(username,password):
    # print(username)
    # print(password)


    # 创建管理员对象
    admin = User()
    # 添加属性
    admin.mobile = username
    admin.nick_name = username
    admin.password = password
    admin.is_admin = True
    # 提交到数据库
    try:
        db.session.add(admin)
        db.session.commit()
    except Exception as e:
        current_app.logger.error(e)
        db.session.rollback()
        return "管理员创建失败"
    return "管理员创建成功"


#添加测试用户
@manager.option('-n', '--name', dest='name')
def add_test_users(name):

    #用户列表容器
    user_list = []

    for num in range(0,1000):
        #创建用户对象
        user = User()

        #设置属性
        user.mobile = "138%08d"%num
        user.nick_name = "138%08d"%num
        user.password_hash = "pbkdf2:sha256:50000$RN3pZHkG$e3a7cd1376b061fd5de262e036ad3a4781c39b86a45a5a9d6b45546914ee48f7"
        #近一个月用户登陆时间
        user.last_login = datetime.datetime.now() - datetime.timedelta(seconds=random.randint(0,3600*24*31))
        #添加到用户列表
        user_list.append(user)

    #添加到数据库中
    try:
        db.session.add_all(user_list)
        db.session.commit()
    except Exception as e:
        current_app.logger.error(e)
        db.session.rollback()
        return "添加失败"

    return "添加成功"





if __name__ == '__main__':
    manager.run()